package com.gaosai.staff.custominterface;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface.OnDismissListener;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;

import com.gaosai.staff.utils.AssociationResource;

/**
 * 通用的Dialog工具类，以sdk的形式供外部调用。
 * @author willis
 *
 */
public class SDKGeneralDialogUtil implements DialogInterface {
	
	/** alertDialog对话框**/
	public AlertDialog alertDialog = null;
	

	/**线程安全的 懒汉式单例**/
	private static SDKGeneralDialogUtil sdkGeneralDialogUtil ;
	
	/**构造方法私有化*/
	private SDKGeneralDialogUtil(){} ;
	
	/**提供取得实例的线程安全的单例**/
	public static SDKGeneralDialogUtil getInstance(){
		if(null == sdkGeneralDialogUtil){
			synchronized (SDKGeneralDialogUtil.class) {
				if(null == sdkGeneralDialogUtil){
					sdkGeneralDialogUtil = new SDKGeneralDialogUtil() ;
				}
			}
		}
		return sdkGeneralDialogUtil ;
	}
	
	
	/**
	 * 显示对话框
	 * Description:TODO
	 * @param context   上下文 
	 * @param dMessage  对话框的消息
	 * @param btnLeft   左按钮的字
	 * @param btnRight  右按钮的字
	 * @param listener  两个按钮的监听器
	 * @param flag      标志位，如一个activity弹出多个对话框，SDKDialogClickListener只需实现一次，
	 *            在按钮事件中通过判断falg来确定是哪个对话框的事件（可以为任意字符串包括""）
	 */
	@Override
	public void showDialog(Context context, String dMessage, String btnLeft,
			String btnRight, DialogClickListener listener, String flag) {
		dialog(context, dMessage, btnLeft, btnRight, listener, flag, false);
	}

	

	/**
	 * 
	 * Description:TODO
	 * @param context   上下文 
	 * @param dMessage  对话框的消息
	 * @param btnLeft   左按钮的字
	 * @param btnRight  右按钮的字
	 * @param listener  两个按钮的监听器
	 * @param flag      标志位，如一个activity弹出多个对话框，SDKDialogClickListener只需实现一次，
	 *            在按钮事件中通过判断falg来确定是哪个对话框的事件（可以为任意字符串包括""）
	 * @param isCancelable  点击返回是否可以取消对话框
	 */
	@Override
	public void showDialog(Context context, String dMessage, String btnLeft,
			String btnRight, DialogClickListener listener, String flag,
			boolean isCancelable) {
		dialog(context, dMessage, btnLeft, btnRight, listener, flag, isCancelable);
	}

	/**
	 * 实例化对话框，让其布局显示出来
	 * @param context  上下文 
	 * @param dMessage 对话框的消息
	 * @param btnLeft  左按钮的字
	 * @param btnRight 右按钮的字
	 * @param listener 两个按钮的监听器
	 * @param flag     标志位，如一个activity弹出多个对话框，SDKDialogClickListener只需实现一次，
	 *            在按钮事件中通过判断falg来确定是哪个对话框的事件（可以为任意字符串包括""）
	 * @param isCancelable 点击返回是否可以取消对话框
	 */
	private void dialog(Context context, String dMessage, String btnLeft,
			String btnRight, final DialogClickListener listener, final String flag,
			boolean isCancelable) {
		if (null != alertDialog && alertDialog.isShowing()) {
			dismissDialog();
		}
		alertDialog = new AlertDialog.Builder(context).create() ;
		alertDialog.show() ;
		alertDialog.setCanceledOnTouchOutside(isCancelable) ;
		Window window = alertDialog.getWindow() ;
		window.setContentView(AssociationResource.getIdByName(context, "layout", "alert_dialog")) ;
		
		/**第一个按钮*/
		Button btn1 = (Button) window.findViewById(AssociationResource.getIdByName(context, "id", "dialog_btn1")) ;
		
		/**第二个按钮*/
		Button btn2 = (Button) window.findViewById(AssociationResource.getIdByName(context, "id", "dialog_btn2")) ;
		
		/**消息内容**/
		TextView message = (TextView) window.findViewById(AssociationResource.getIdByName(context, "id", "message")) ;
		
		/**取得第一个按钮的布局**/
		View btn1_parent = window.findViewById(AssociationResource.getIdByName(context, "id", "dialog_btn1_parent")) ;
		
		alertDialog.setOnDismissListener(new OnDismissListener() {

			@Override
			public void onDismiss(android.content.DialogInterface dialog) {
				if(null !=listener){
					
				}
			}
		}) ;
		if(TextUtils.isEmpty(btnLeft)){
			btn1_parent.setVisibility(View.GONE) ;
		}else{
			btn1.setText(btnLeft) ;
		}
		btn2.setText(btnRight) ;
		/**设置标题*/
		message.setText(dMessage) ;
		/**btnleft按钮的点击事件*/
		btn1.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				dismissDialog() ;
				if(null !=listener){
					listener.leftBtnClick(flag) ;
				}
			}
		}) ;
		
		/**btnRinght按钮的点击事件*/
		
		btn2.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				dismissDialog();
				if(null != listener){
					listener.rightBtnClick(flag) ;
				}
			}
		}) ;
		
	}
	
	/**
	 * dialog消失
	 * Description:TODO
	 */
	@Override
	public void dismissDialog() {
		try {
			if(null !=alertDialog && alertDialog.isShowing()){
				alertDialog.dismiss() ;
				alertDialog = null ;
			}
		} catch (Exception e) {
			Log.d("Custom Dialog dismiss exception:", e.toString());
		}
	}

	@Override
	public void showProgressDialog(Context context,
			ProgressCancelCallBack cancel) {

	}

	@Override
	public void dismissProgressDialog() {
		// TODO Auto-generated method stub

	}


}
